home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / cgazv5n4.arc / LINEDIT.CPP < prev    next >
C/C++ Source or Header  |  1991-09-23  |  986b  |  33 lines

  1. //--- LINEDIT.CPP ------------------------ Listing 4 -----------
  2. // Batch editing for a file, a line at a time -- a more complex 
  3. // test of string class.
  4. // by Bruce Eckel. See Listing 1 for copyright information.
  5. //--------------------------------------------------------------
  6.  
  7. #include "stringc.h"
  8.  
  9. main(int argc, char * argv[]) {
  10.   if(argc < 4) {
  11.     fprintf(stderr, "usage: linedit search replace filename\n");
  12.     exit(1);
  13.   }
  14.   FILE* fp = fopen(argv[3], "r");
  15.   if(fp == NULL) {
  16.     fprintf(stderr, "could not open %s\n", argv[3]);
  17.     exit(1);
  18.   }
  19.   const bsz = 80;  char buf[bsz];
  20.   for(;;) {
  21.     if(!fgets(buf, bsz, fp)) break;  // quit on end-of-file
  22.     buf[strlen(buf) -1] = '\0';  // erase terminating newline
  23.     string line(buf);
  24.     for(;;) {
  25.       int search = line.search(argv[1]);
  26.       if(search == -1) break;
  27.       line.erase(search, strlen(argv[1]));
  28.       line.insert(search, argv[2]);
  29.     }
  30.     line.print();
  31.   }
  32.   fclose(fp);
  33. }